/* Universidad del Valle de Guatemala
 * Sara López 12050
 * Matías Vasquez 12186
 * Nombre: Stack.java
 * Sección:21
 */



/*Importar la Librería io*/
import java.io.*;
import com.sun.java.swing.plaf.windows.WindowsFileChooserUI;
import java.awt.Color;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;


public class Archivo {
    
    
    public float calcular(Stack<Float> pila, File archivo){
        
        try{
            /*FileReader es una clase que permite leer los caracteres de un archivo*/
            FileReader enLectura=new FileReader(archivo);
            /*BufferedReader lee la entrada de caracteres desde el archivo*/
            BufferedReader br=new BufferedReader(enLectura);
            String aux;
            boolean error = false;
            char let;
            while((aux=br.readLine())!=null){					// Se lee una linea para luego recorrerla
                int inicio = 0;
                for(int i=0 ; i < aux.length() ; i++)			// Se recorre la linea de texto ingresada
                {
                    char var = aux.charAt(i);
                    String str = "";
                    if(var == ' ' )					//Cuando se encuentra un espacio, se
                    {
                        float num = 0;
                        try{
                            str = aux.substring(inicio, i);
                            num = Integer.parseInt(str);			//Antes de guardar el numero se convierte de string a numero
                            pila.push(num);							//Se guarda en la pila
                        }catch(Exception e)
                        {										//Si hubo error al convertir, es porque no es un numero, entonces se revisa si es signo de operacion
                            if((str.contains("+")) || (str.contains("-")) || (str.contains("*")) ||(str.contains("/")))
                            {
                                float num1 = pila.pop();		//Si si es un signo entonces se sacan los dos operandos y se revisa que operacion es
                                float num2 = pila.pop();
                                float resultado = 0;
                                if(str.contains("+"))
                                {
                                    resultado = num2 + num1;
                                }else if(str.contains("-"))
                                {
                                    resultado = num2 - num1;
                                }else if(str.contains("*"))
                                {
                                    resultado = num2 * num1;
                                }else if(str.contains("/") && num1!=0)
                                {
                                    resultado = num2 / num1;
                                }else if(str.contains("/") && num1==0)
                                {
                                    error = true;
                                    resultado = 0;
                                }
                                pila.push(resultado);		//Dependiendo de la operacion se realiza lo que hay que hacer y se guarda el resultado en la pila
                                
                            }
                        }
                        inicio = i+1;		//Esto es para el contador donde se revisa que es lo que se guarda en la pila
                    }
                    if(i==(aux.length()-1)&& var != ' ')	//Si es el ultimo caracter y no es un espacio, se revisa si es un numero o un operando
                    {
                        float num = 0;
                        try{
                            str = aux.substring(inicio, i+1);
                            num = Integer.parseInt(str);
                            //Si es un numero no se hace nada porque ya no hay mas operandos
                        }catch(Exception e)
                        {					//Si el caracter es un operador entonces se revisa que operacion es y se realiza
                            if((str.contains("+")) || (str.contains("-")) || (str.contains("*")) ||(str.contains("/")))
                            {
                                float num1 = pila.pop();
                                float num2 = pila.pop();
                                float resultado = 0;
                                if(str.contains("+"))
                                {
                                    resultado = num2 + num1;
                                }else if(str.contains("-"))
                                {
                                    resultado = num2 - num1;
                                }else if(str.contains("*"))
                                {
                                    resultado = num2 * num1;
                                }else if(str.contains("/") && num1!=0)
                                {
                                    resultado = num2 / num1;
                                }else if(str.contains("/") && num1==0)
                                {
                                    error = true;
                                    resultado = 0;
                                }
                                pila.push(resultado);		//Se guarda el resultado en la pila para luego desplegarlo
                                
                            }
                        }
                        inicio = i+1;
                    }
                    
                }
                if(error == false)		//Si no hay ningun error en la operacion se muestra el resultado
                {
                    return pila.pop();
                }else
                {
                    System.out.println("No se puede dividir dentro de 0");		//Si se intento dividir dentro de 0 se le indica al usuario que no se puede
                }
            }
        }catch (IOException e){}
        
        return 0;
        
    }
    
    
}
    

